package com.ddxz.middleground.master.service;

import com.ddxz.middleground.master.dto.MasterHeader;
import com.ddxz.middleground.master.dto.menu.MenuInfo;
import com.ddxz.middleground.master.util.MasterData;
import com.ddxz.tool.web.dto.DdxzResponse;

/**
 * class description
 *
 * @author 朱宗刚
 * @version 1.0.0
 * @date 2020/7/30
 */

public interface MenuService extends MasterData {
    /**
     * 加载应用的菜单树
     *
     * @param header       请求头信息
     * @param appId        应用标识
     * @param keyword      检索关键字
     * @param permissionId 权限标识
     * @return 菜单树
     */
    DdxzResponse getAppMenuTree(MasterHeader header, String appId, String keyword, String permissionId);

    /**
     * 保存菜单信息
     *
     * @param header   请求头信息
     * @param menuInfo 菜单信息
     * @return 是否保存成功
     */
    DdxzResponse menuSave(MasterHeader header, MenuInfo menuInfo);

    /**
     * 查看菜单详情
     *
     * @param header 请求头信息
     * @param menuId 菜单标识
     * @return 菜单详情
     */
    DdxzResponse menuDetail(MasterHeader header, String menuId);

    /**
     * 删除指定的菜单；如果菜单下包含子菜单则不允许删除
     *
     * @param header 请求头信息
     * @param menuId 菜单标识
     * @return 是否删除成功
     */
    DdxzResponse menuRemove(MasterHeader header, String menuId);

    /**
     * 移动指定的菜单
     *
     * @param header    请求头信息
     * @param direction 移动方向 1 上移；2 下移； 3 升级； 4 降级
     * @param menuId    菜单标识
     * @return 是否移动成功
     */
    DdxzResponse menuMove(MasterHeader header, Integer direction, String menuId);

    /**
     * 获取用户可以操作的菜单树
     *
     * @param header 请求头信息
     * @param appId  应用标识
     * @return 菜单树
     */
    DdxzResponse getAppMenuTree(MasterHeader header, String appId);
}
